//
// Created by Administrator on 2023/4/25.
/*
 2023春季伴学挑战赛06：C++语言
http://www.aisichuang.net/?#/main/Competition/TitlePage?id=1587&raceId=1304&stateanswer=false

题目名称: 闹钟起床
创建者: 爱思创
时间限制: 1000 MS
内存限制: 256 MB
闹钟起床
题目描述
周老师有三大爱好，吃饭，睡觉，出题。所以周老师每天都必须要睡足a分钟。

他定了一个闹钟，因为周老师实在是太困了，所以他刚定完闹钟就睡着了，而闹钟会在b分钟后响起。如果此时周老师还没有睡足a分钟，那么他会定一个c分钟的闹钟，并花费d分钟入睡。

如果他被吵醒后仍未达到a分钟，那么他会再定c分钟闹钟并花费d分钟入睡…如果某次闹钟响起时他已经睡足了a分钟，他就会起床。

请编程计算周老师将在多少分钟后起床，或输出−1表示周老师永远不会起床。

输入格式
第一行包含一个整数(1≤t≤1000)，表示测试用例的数量。

每个测试用例只有一行包含四个整数(1≤a,b,c,d≤10^9n )。

a表示周老师必须要睡足多少分钟。
b表示闹钟过了多少分钟后响起。
c表示下一个闹钟定了多少分钟。
d表示被吵醒后重新入睡需要多少分钟。

输出格式
对于每个测试用例，输出一行一个整数，表示周老师将在多少分钟后起床。

如果周老师永远无法起床请输出-1

样例 #1
样例输入 #1
7
10 3 6 4
11 3 6 4
5 9 4 10
6 5 2 3
1 1 1 1
3947465 47342 338129 123123
234123843 13 361451236 361451000

样例输出 #1
27
27
9
-1
1
6471793
358578060125049

提示
在第一个测试用例中，周老师在3分钟后醒来，他只休息了3分钟，但他需要睡足10分钟。所以在那之后，他将闹钟设置为在6分钟后响起并花费4分钟入睡。因此，他休息了6−4=2分钟，总计3+2=5分钟的睡眠。然后他又重复了3次这个过程，最后得到11分钟的睡眠。最后，他从床上起来。他最初睡了3分钟，之后将闹钟重置4次，所以答案是3+4×6=27。

第二个例子和第一个几乎一样，但是周老师需要11睡眠分钟而不是10分钟，然而，这并没有改变最终的结果，因为他已经得到了11分钟的睡眠时间。

在第三个测试用例中，周老师在第一次闹钟响起时醒来休息得很好，因此，答案是闹钟第一次响起的时间b=9。

在第四个测试用例中，周老师在55分钟后醒来。不幸的是，他不断地重置他的闹钟，甚至一分钟都无法休息 :(

 * */
// 老师的方法: 后边醒来的次数用数学计算取代循环计算
#include <iostream>

using namespace std;

int main()
{
    int t;
    cin >> t;
    int a, b, c, d;
    long long g;
//    a 老师必须要睡足多少分钟。
//    b 闹钟过了多少分钟后响起。
//    c 下一个闹钟定了多少分钟。
//    d 被吵醒后重新入睡需要多少分钟。
//    g 用多长时间起床
    while (t)
    {
        cin >> a >> b >> c >> d;
        g=b;
//        cout << t << ' ';
        // 第一次闹铃响的时候已经睡够了a分钟则直接起床
        if (b>=a)
            cout<<b<<endl;
        // 第一次没起来的话 如果闹铃响了还没入睡 就永远也睡不够
        else if (c<d)
            cout<<-1<<endl;
        else
        {
            a-=b;
//            while(a>0)
//            {
//                a-=(c-d);
//                g+=c;
//            }
            //    如果最后一次闹钟响了正好凑够睡眠时间
            if(a%(c-d)==0)
            {
                g+=a/(c-d)*c;
            // 如果最后一次闹铃响了 超出了睡眠时间
            }else{
                g+=(a/(c-d)+1)*c;
            }
            cout<<g<<endl;
        }
        t--;
    }
    return 0;
}
